package com.runvp.common.model.tcp;

/**
 * 通用指令所在区间
 */
public class SectionRule {



    /**
     * 协议头(2字节0-4): D6DADEDB
     */
    public static int[] head = new int[]{0,4};
    /**
     * 数据类型(1字节6,8): 01
     * ◼ 服务器往设备下发为:0x01
     * ◼ 设备应答服务器指令为:0x02
     * ◼ 设备请求服务器为:0x03
     * ◼ 服务器应答设备请求为
     */
    public static int[] type = new int[]{4,6};
    /**
     * 指令名
     */
    public static int[] cmd = new int[]{6,8};
    /**
     * 设备 ID，在设备登录完成后，每次和服务器进行交互数据时，携带服务器下发的ID 值。
     */
    public static int[] did(){
        return new int[]{8,20};
    }
    /**
     * 版本，版本用于区别不同数据交互的加密数据信息 KEY 和 IV
     */
    public static int[] version(){
        return new int[]{20,22};
    }
    /**
     * 业务参数的长度值，此处指的是业务参数的长度，不包括 TAG 的 16 字节数据
     */
    public static int[] length(){
        return new int[]{22,26};
    }
    /**
     * 业务参数，业务参数原始数据采用 json 保存，之后再通过"AES-128-GCM"加密.
     */
    public static int[] body(int length){
        return new int[]{26,length-32};
    }
    /**
     * gcm 产生的 TAG 标识数据
     */
    public static int[] tag(int length){
        return new int[]{length-32,length};
    }
}
